(function(){
    var _true = true,
        _false = false,
        _encodeURI = encodeURIComponent,
        _o_window = window,
        _undefined = undefined,
        _o_string = String,
        _o_math = Math,
        _push = "push",
        _cookie = "cookie",
        _charAt = "charAt",
        _str_indexOf = "indexOf",
        _gaGlobal = "gaGlobal",
        _getTime = "getTime",
        _toString = "toString",
        _str_window = "window",
        _length = "length",
        _str_document = "document",
        _split = "split",
        _location = "location",
        _protocol = "protocol",
        _href = "href",
        _substring = "substring",
        _join = "join",
        _toLowerCase = "toLowerCase";
    var _gat_ = "__gat",
        _hl_ = "_hl",
        _version_ = "4.9.1",
        _gaUserPrefs_ = "_gaUserPrefs",
        _ioo_ = "ioo",
        _amp_ = "&",
        _equal_ = "=",
        _param_autma = "__autma=",
        _param_autmb = "__autmb=",
        _param_autmc = "__autmc=",
        _param_autmk = "__autmk=",
        _param_autmv = "__autmv=",
        _param_autmz = "__autmz=",
        _param_autmx = "__autmx=",
        _param_gaso = "GASO=";
    var Registry = function(){
            var oThis = this,
                _registry = [],
                _alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
            oThis.register = function(idx){
                _registry[idx] = _true;
            };
            oThis.getautmU = function(){
                for(var arr_autmu = [], i = 0; i < _registry[_length]; i++){
                    if(_registry[i]){
                        arr_autmu[_o_math.floor(i/6)] ^= 1 << i % 6;
                    }
                }
                for(i = 0; i < arr_autmu[_length]; i++){
                    arr_autmu[i] = _alphabet[_charAt](arr_autmu[i] || 0);
                }
                return arr_autmu[_join]("");
            }
        },
        registry = new Registry;
    function Register(idx){
        registry.register(idx);
    }
    var Global = function(win, doc){
            var oThis = this;
            oThis.window = win;
            oThis.document = doc;
            oThis.setTimeout = function(callback, delay){
                setTimeout(callback, delay);
            };
            
            oThis.contains = function(key){
                return navigator.userAgent[_str_indexOf](key) >= 0;
            };
            oThis.isFirefox = function(){
                return oThis.contains("Firefox") && ![].reduce;
            };
            oThis.processSource = function(source){
                if(!source || !oThis.contains("Firefox")){
                    return source;
                }
                source = source.replace(/\n|\r/g, " ");
                for(var i = 0, len = source[_length]; i < len; ++i){
                    var charCode = source.charCodeAt(i)&255;
                    if(charCode == 10 || charCode == 13){
                        source = source[_substring](0, i) + "?" + source[_substring](i + 1);
                    }
                }
                return source;
            }
        },
        $Global = new Global(_o_window, document);
    var CreateBinder = function(o){
            return function(method, idx, func){
                o[method] = function(){
                    Register(idx);
                    return func.apply(o, arguments);
                };
                return func;
            }
        },
        AddListener = function(element, type, listener, useCapture){
            if(element.addEventListener){
                element.addEventListener(type, listener, !!useCapture);
            }else{
                element.attachEvent && element.attachEvent("on" + type, listener);
            }
        },
        IsArray = function(o){
            return Object.prototype[_toString].call(Object(o)) == "[object Array]";
        },
        IsEmpty = function(o){
            return ((_undefined == o) || ("-" == o) || ("" == o));
        },
        Pick = function(map, key, separator){
            var result = "-",
                idx;
            if(!IsEmpty(map) && !IsEmpty(key) && !IsEmpty(separator)){
                idx = map[_str_indexOf](key);
                if(idx > -1){
                    var endIdx = map[_str_indexOf](separator, idx);
                    if(endIdx < 0){
                        endIdx = map[_length];
                    }
                    result = map[_substring](idx + key[_str_indexOf](_equal_) + 1, endIdx);
                }
            }
            return result;
        },
        CheckHash = function(o){
            var result = _false,
                code = 0,
                i,
                _char;
            if(!IsEmpty(o)){
                result = _true;
                for(i = 0; i < o[_length]; i++){
                    _char = o[_charAt](i);
                    code += "." == _char ? 1 : 0;
                    result = result && code <= 1 && (0 == i && "-" == _char || ".0123456789"[_str_indexOf](_char) > -1);
                }
            }
            return result;
        },
        Encode = function(uri, isAll){
            var _encode = _encodeURI;
            if(_encode instanceof Function){
                return isAll ? encodeURI(uri) : _encode(uri);
            }else{
                Register(68);
                return escape(uri);
            }
        },
        Decode = function(encodedURI, isAll){
            var _decode = decodeURIComponent,
                uri;
            encodedURI = encodedURI[_split]("+")[_join](" ");
            if(_decode instanceof Function){
                try{
                    uri = isAll ? decodeURI(encodedURI) : _decode(encodedURI);
                }catch(ex){
                    Register(17);
                    uri = unescape(encodedURI);
                }
            }else{
                Register(68);
                uri = unescape(encodedURI);
            }
            return uri;
        },
        Contains = function(str, sub){
            return (str[_str_indexOf](sub) > -1);
        };
    function Trim(str){
        if(!str || "" == str){
            return "";
        }
        for(; str[_charAt](0)[_length] > 0 && " \n\r\t"[_str_indexOf](str[_charAt](0)) > -1;){
            str = str[_substring](1);
        }
        for(; str[_charAt](str[_length] - 1)[_length] > 0 && " \n\r\t"[_str_indexOf](str[_charAt](str[_length] - 1)) > -1;){
            str = str[_substring](0, str[_length] - 1);
        }
        return str;
    }
    
    var Push = function(arr, value){
            arr[_push] || Register(94);
            arr[arr[_length]] = value;
        },
        Hash = function(str){
            var hash = 1,
                charCode = 0,
                idx;
            if(!IsEmpty(str)){
                hash = 0;
                for(idx = str[_length] - 1; idx >= 0; idx--){
                    charCode = str.charCodeAt(idx);
                    hash = (hash << 6&268435455) + charCode+(charCode << 14);
                    charCode = hash&266338304;
                    hash = charCode != 0 ? hash ^ charCode>>21 : hash;
                }
            }
            return hash;
        },
        Random = function(){
            /*
             * 2,147,483,647（二十一亿四千七百四十八万三千六百四十七）是2147483646与2147483648之间的自然数，
             * 也是欧拉在1772年所发现的一个梅森素数，它等于2^31 -1，是32位操作系统中最大的符号型整型常量。
             */
            return _o_math.round(_o_math.random() * 2147483647);
        },
        emptyFunction = function(){};
    var Organic = function(engine, keyword){
            this.engine = engine;
            this.keyword = keyword;
        },
        Config = function(){
            function parseOrganicData(data){
                var organic = [];
                data = data[_split](",");
                for(var item, i = 0; i < data[_length]; i++){
                    item = data[i][_split](":");
                    organic[_push](new Organic(item[0], item[1]));
                }
                return organic;
            }
            var oThis = this;
            //不能修改(start)
            oThis.campaign = "utm_campaign";
            oThis.content = "utm_content";
            oThis.id = "utm_id";
            oThis.medium = "utm_medium";
            oThis.nooverride = "utm_nooverride";
            oThis.source = "utm_source";
            oThis.term = "utm_term";
			//不能修改(end)
            oThis.clid = "gclid";
            oThis.allowAnchor = 0;
            oThis.allowLinker = 0;
            //hl
            oThis.campaignCookieTimeout = 0;
            oThis.sessionCookieTimeout = 18E5;
            oThis.visitorCookieTimeout = 63072E6;
            oThis.ignoredOrganic  = [];
            oThis.ignoredReferral = [];
            oThis.googleCustomSearchPath = "cse";
            oThis.googleKey = "q";
            oThis.maxCustomVariables = 50;
            oThis.organic = parseOrganicData("daum:q,eniro:search_word,naver:query,pchome:q,images.google:q,google:q,yahoo:p,yahoo:q,msn:q,bing:q,aol:query,aol:encquery,aol:q,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,about:terms,mamma:q,alltheweb:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,kvasir:q,sesam:q,ozu:q,terra:query,mynet:q,ekolay:q,rambler:query,rambler:words");
            oThis.cookiePath = "/";
            oThis.sampleRate = 100;
            oThis.localGifPath = "/__autm.gif";
            oThis.detectTitle = 1;
            oThis.detectFlash = 1;
            oThis.transactionDelim = "|";
            oThis.clientInfo = 1;
            oThis.campaignTrack = 1;
            oThis.allowHash = 1;
            oThis.domain = "auto";
            oThis.localServerMode = 1;
            oThis.Sc = 10;
            oThis.Qb = 10;
            oThis.Tc = 0.2;
            oThis.namespace = _undefined;
        };
    var Cookie = function(config){
            function pick(cookie, param, namespace, ignoreExpires){
                var value = "",
                    expires = 0;
                value = Pick(cookie, "2" + param, ";");
                if(!IsEmpty(value)){
                    var idx = value[_str_indexOf]("^" + namespace + ".");
                    if(idx < 0){
                        return["", 0];
                    }
                    value = value[_substring](idx + namespace[_length] + 2);
                    if(value[_str_indexOf]("^") > 0){
                        value = value[_split]("^")[0];
                    }
                    var values = value[_split](":");
                    value = values[1];
                    expires = parseInt(values[0], 10);
                    if(!ignoreExpires && expires < oThis.currentTime){
                        value = "";
                    }
                }
                if(IsEmpty(value)){
                    value = "";
                }
                return [value, expires];
            }
            function combine(value, namespace){
                return "^" + [[namespace, value[1]][_join]("."), value[0]][_join](":");
            }
            function getCookieExpires(timeout){
                var date = new Date;
                timeout = new Date(date[_getTime]() + timeout);
                return "expires=" + timeout.toGMTString() + "; ";
            }
            var oThis = this,
                _config = config;
            oThis.currentTime = (new Date)[_getTime]();
            var params = [_param_autma, _param_autmb, _param_autmc, _param_autmz, _param_autmv, _param_autmx, _param_gaso];
            oThis.getCookie = function(){
                var cookie = $Global[_str_document][_cookie];
                return _config.namespace ? oThis.getCookieByNamespace(cookie, _config.namespace) : cookie;
            };
            oThis.getCookieByNamespace = function(cookie, namespace){
                for(var arrParams = [], value, i = 0; i < params[_length]; i++){
                    value = pick(cookie, params[i], namespace)[0];
                    IsEmpty(value) || (arrParams[arrParams[_length]] = params[i] + value + ";");
                }
                return arrParams[_join]("");
            };
            oThis.setCookie = function(key, value, timeout){
                var cookie = timeout > 0 ? getCookieExpires(timeout) : "";
                if(_config.namespace){
                    value = oThis.setCookieByNamespace($Global[_str_document][_cookie], key, _config.namespace, value, timeout);
                    key = "2" + key;
                    cookie = timeout > 0 ? getCookieExpires(_config.visitorCookieTimeout) : "";
                }
                key += value;
                key = $Global.processSource(key);
                if(key[_length] > 2E3){
                    Register(69);
                    key = key[_substring](0, 2E3)
                }
                cookie = key + "; path=" + _config.cookiePath + ";" + cookie + oThis.getCookieDomain();
                $Global[_str_document].cookie = cookie;
            };
            oThis.setCookieByNamespace = function(cookie, key, namespace, value, timeout){
                var _value = "";
                timeout = timeout || _config.visitorCookieTimeout;
                value = combine([value, oThis.currentTime + timeout * 1], namespace);
                _value = Pick(cookie, "2" + key, ";");
                if(!IsEmpty(_value)){
                    cookie = combine(pick(cookie, key, namespace, _true), namespace);
                    _value = _value[_split](cookie)[_join]("");
                    return _value = value + _value;
                }
                return value;
            };
            oThis.getCookieDomain = function(){
                return IsEmpty(_config.domain) ? "" : "domain="+ _config.domain + ";";
            }
        };
    var GaCookie = function(config){
        function join(arr){
            arr = IsArray(arr) ? arr[_join](".") : "";
            return IsEmpty(arr) ? "-" : arr;
        }
        function split(str, n){
            var result = [], i;
            if(!IsEmpty(str)){
                result = str[_split](".");
                if(n){
                    for(i = 0; i < result[_length]; i++){
                        CheckHash(result[i]) || (result[i] = "-");
                    }
                }
            }
            return result;
        }
        function initautmParams(map, domainHash, separator){
            var _autmParams = oThis.autmParams,
                i,
                param;
            for(i = 0; i < _autmParams[_length]; i++){
                param = _autmParams[i][0];
                param += IsEmpty(domainHash) ? domainHash : domainHash + _autmParams[i][4];
                _autmParams[i][2](Pick(map, param, separator));
            }
        }
        
        var arrautmA,
            arrautmB,
            arrautmC,
            arrautmZ,
            _arrautmV,
            _autmx,
            _GASO,
            oThis = this,
            _autmParamsHash,
            _config = config;
        oThis.cookie = new Cookie(config);
        oThis.checkParamsHash = function(){
            return _undefined == _autmParamsHash || _autmParamsHash == oThis.hashautmParams();
        };
        oThis.getCookie = function(){
            return oThis.cookie.getCookie();
        };
        oThis.getautmX = function(){
            return _autmx ? _autmx : "-";
        };
        oThis.setautmX = function(autmx){
            _autmx = autmx;
        };
        oThis.setautmParamsHash = function(hash){
            _autmParamsHash = CheckHash(hash) ? hash * 1 : "-";
        };
        oThis.getautmV = function(){
            return join(_arrautmV);
        };
        oThis.setautmV = function(autmv){
            _arrautmV = split(autmv);
        };
        oThis.deleteautmVCookie = function(){
            oThis.cookie.setCookie(_param_autmv, "", -1);
        };
        oThis.getautmParamsHash = function(){
            return _autmParamsHash ? _autmParamsHash : "-";
        };
        oThis.getCookieDomain = function(){
            return IsEmpty(_config.domain) ? "" : "domain=" + _config.domain + ";";
        };
        oThis.getautmA = function(){
            return join(arrautmA);	
        };
        oThis.setautmA = function(autma){
            arrautmA = split(autma, 1);
        };
        oThis.getautmB = function(){
            return join(arrautmB);
        };
        oThis.setautmB = function(autmb){
            arrautmB = split(autmb, 1);
        };
        oThis.getautmC = function(){
            return join(arrautmC);
        };
        oThis.setautmC = function(autmc){
            arrautmC = split(autmc, 1);
        };
        oThis.getautmZ = function(){
            return join(arrautmZ);
        };
        oThis.setautmZ = function(autmz){
            arrautmZ = split(autmz);
            for(var i = 0; i < arrautmZ[_length]; i++){
                if(i < 4 && !CheckHash(arrautmZ[i])){
                    arrautmZ[i] = "-";
                }
            }
        };
        oThis.getGASO = function(){
            return _GASO;
        };
        oThis.setGASO = function(gaso){
            _GASO = gaso;
        };
        oThis.initialize = function(){
            arrautmA = [];
            arrautmB = [];
            arrautmC = [];
            arrautmZ = [];
            _autmx = _undefined;
            _arrautmV = [];
            _autmParamsHash = _undefined
        };
        oThis.hashautmParams = function(){
            for(var params = "", i = 0; i < oThis.autmParams[_length]; i++){
                params += oThis.autmParams[i][1]();
            }
            return Hash(params);
        };
        oThis.setDomainHashByCookie = function(domainHash){
            var cookie = oThis.getCookie(),
                result = _false;
            if(cookie){
                initautmParams(cookie, domainHash, ";");
                oThis.setautmParamsHash(_o_string(oThis.hashautmParams()));
                result = _true;
            }
            return result;
        };
        oThis.setautmKHashByLocation = function(params){
            initautmParams(params, "", _amp_);
            oThis.setautmParamsHash(Pick(params, _param_autmk, _amp_))
        };
        oThis.getParams = function(){
            var _autmParams = oThis.autmParams,
                _params = [],
                i;
            for(i = 0; i < _autmParams[_length]; i++){
                Push(_params, _autmParams[i][0] + _autmParams[i][1]());
            }
            Push(_params, _param_autmk + oThis.hashautmParams());
            return _params[_join](_amp_);
        };
        oThis.copyCookiePath = function(domainHash, cookiePath){
            var _autmParams = oThis.autmParams,
                _cookiePath = _config.cookiePath;
            oThis.setDomainHashByCookie(domainHash);
            _config.cookiePath = cookiePath;
            for(var i = 0; i < _autmParams[_length]; i++){
                if(!IsEmpty(_autmParams[i][1]()))
                {
                    _autmParams[i][3]();
                    _config.cookiePath = _cookiePath;
                }
            }
        };
        oThis.setautmACookie = function(){
            oThis.cookie.setCookie(_param_autma, oThis.getautmA(), _config.visitorCookieTimeout)
        };
        oThis.setautmBCookie = function(){
            oThis.cookie.setCookie(_param_autmb, oThis.getautmB(), _config.sessionCookieTimeout)
        };
        oThis.setautmCCookie = function(){
            oThis.cookie.setCookie(_param_autmc, oThis.getautmC(), 0)
        };
        oThis.setautmZCookie = function(){
            oThis.cookie.setCookie(_param_autmz, oThis.getautmZ(), _config.campaignCookieTimeout)
        };
        oThis.setautmXCookie = function(){
            oThis.cookie.setCookie(_param_autmx, oThis.getautmX(), _config.visitorCookieTimeout)
        };
        oThis.setautmVCookie = function(){
            oThis.cookie.setCookie(_param_autmv, oThis.getautmV(), _config.visitorCookieTimeout)
        };
        oThis.setGASOCookie = function(){
            oThis.cookie.setCookie(_param_gaso, oThis.getGASO(), 0)
        };
        oThis.autmParams = [
            [_param_autma, oThis.getautmA, oThis.setautmA, oThis.setautmACookie, "."],
            [_param_autmb, oThis.getautmB, oThis.setautmB, oThis.setautmBCookie, ""],
            [_param_autmc, oThis.getautmC, oThis.setautmC, oThis.setautmCCookie, ""],
            [_param_autmx, oThis.getautmX, oThis.setautmX, oThis.setautmXCookie, ""],
            [_param_autmz, oThis.getautmZ, oThis.setautmZ, oThis.setautmZCookie, "."],
            [_param_autmv, oThis.getautmV, oThis.setautmV, oThis.setautmVCookie, "."]
        ]
    };
    var google_analytics_domain = "https:" == $Global[_str_document][_location][_protocol] ? "https://ssl.google-analytics.com/" : "http://www.google-analytics.com/",
        google_analytics_path = google_analytics_domain + "p/__autm.gif",
        
        Ajax = function(){
            var oThis = this;
            oThis.send = function(url, param, mark, callback, _ioo){
                if(param[_length] <= 2036 || _ioo){
                    oThis.sendByImage(url + "?" + param, callback);
                }else if(param[_length] <= 8192){
                    $Global.isFirefox() ? oThis.sendByImage(url + "?" + mark + "&err=ff2post&len=" + param[_length], callback) : oThis.Send(param, callback);
                }else{
                    oThis.sendByImage(url + "?" + mark + "&err=len&max=8192&len=" + param[_length], callback);
                }
            };
            oThis.sendByImage = function(src, callback){
                var image = new Image(1, 1);
                image.src = src;
                image.onload = function(){
                    image.onload = null;
                    (callback || emptyFunction)()
                }
            };
            oThis.Send = function(param, callback){
                oThis.sendByRequest(param, callback) || oThis.sendByIFrame(param, callback)
            };
            oThis.sendByRequest = function(param, callback){
                var request,
                    Request = $Global[_str_window].XDomainRequest;
                if(Request){
                    request = new Request;
                    request.open("POST", google_analytics_path);
                }else if(Request = $Global[_str_window].XMLHttpRequest){
                    Request = new Request;
                    if("withCredentials"in Request){
                        request = Request;
                        request.open("POST", google_analytics_path, _true);
                        request.setRequestHeader("Content-Type", "text/plain");
                    }
                }
                if(request){
                    request.onreadystatechange = function(){
                        if(request.readyState == 4){
                            callback && callback();
                            request = null;
                        }
                    };
                    request.send(param);
                    return _true;
                }
                return _false;
            };
            oThis.sendByIFrame = function(param, callback){
                var doc = $Global[_str_document];
                if(doc.body){
                    param = _encodeURI(param);
                    try{
                        var fra = doc.createElement('<iframe name="' + param + '"></iframe>');
                    }catch(ex){
                        fra = doc.createElement("iframe");
                        fra.name = param;
                    }
                    fra.height = "0";
                    fra.width = "0";
                    fra.style.display = "none";
                    fra.style.visibility = "hidden";
                    var _loca = doc[_location];
                    _loca = _loca[_protocol] + "//" + _loca.host + "/favicon.ico";
                    _loca = google_analytics_domain + "u/post_iframe.html#" + _encodeURI(_loca);
                    var setFra = function(){
                        fra.src = "";
                        fra.parentNode && fra.parentNode.removeChild(fra);
                    };
                    AddListener($Global[_str_window], "beforeunload", setFra);
                    var succes = _false,
                        i = 0,
                        fraLoad = function(){
                            if(!succes){
                                try{
                                    if(i > 9 || fra.contentWindow[_location].host == doc[_location].host){
                                        succes = _true;
                                        setFra();
                                        var win = $Global[_str_window],
                                            _beforeunload = "beforeunload",
                                            _setFra = setFra;
                                        if(win.removeEventListener){
                                            win.removeEventListener(_beforeunload, _setFra, _false); }
                                        else{
                                            win.detachEvent && win.detachEvent("on" + _beforeunload, _setFra);
                                        }
                                        callback && callback();
                                        return
                                    }
                                }catch(ex){}
                                i++;
                                $Global.setTimeout(fraLoad, 200)
                            }
                        };
                    AddListener(fra, "load", fraLoad);
                    doc.body.appendChild(fra);
                    fra.src = _loca;
                }else{
                    $Global.setTimeout(function(){
                            oThis.sendByIFrame(param, callback);
                        }, 100)
                }
            }
        };
    var GaAjax = function(config){
        var oThis = this,
            _config = config,
            _gaCookie = new GaCookie(_config),
            ajax = new Ajax,
            _ioo = !_TrackerFactory.getGaUserPrefs(),
            emptyFunction = function(){};
        oThis.getGoogleAnalyticsPath = function(){
            return"https:" == $Global[_str_document][_location][_protocol] ? "https://ssl.google-analytics.com/__autm.gif" : "http://www.google-analytics.com/__autm.gif"
        };
        oThis.send = function(param, account, domainHash, e, d, callback){
            var localServerMode = _config.localServerMode,
                location = $Global[_str_document][_location];
                _gaCookie.setDomainHashByCookie(domainHash);
            //和_autmc一起决定访客的Session
            var arr_autmb = _gaCookie.getautmB()[_split](".");
            if(arr_autmb[1] < 500 || e){
                if(d){
                    var _time = (new Date)[_getTime](),
                        o;
                    o = (_time - arr_autmb[3]) * (_config.Tc/1E3);//127635166.2.10.1264374807
                    if(o >= 1){
                        arr_autmb[2] = _o_math.min(_o_math.floor(arr_autmb[2] * 1 + o), _config.Qb);
                        arr_autmb[3] = _time;
                    }
                }
                if(e || !d || arr_autmb[2] >= 1){
                    if(!e && d){
                        arr_autmb[2] = arr_autmb[2] * 1 - 1;
                    }
                    arr_autmb[1] = arr_autmb[1] * 1 + 1;
                    var _version = "autmwv=" + _version_;
                    _time = "&autmn=" + Random();
                    var mark = _version + "e"+ _time;
                    param = _time + (IsEmpty(location.hostname) ? "" : "&autmhn=" + Encode(location.hostname)) + (_config.sampleRate == 100 ? "" : "&autmsp=" + Encode(_config.sampleRate)) + param;
                    if(0 == localServerMode || 2 == localServerMode){
                    	param += "&autmcc=" + oThis.getCheckCode(domainHash);
						var userid = 0;
						var arrStr = document.cookie.split(";");
					  	for(var i = 0;i < arrStr.length;i ++){
					  	   //userid
					       if(arrStr[i].indexOf("www58com") > -1){
						     userid = arrStr[i];
						     var str = userid.split("&");
						     for(var j = 0; j < str.length; j++){
						   		 var temp = str[j].split("=");
						   	   	 if(temp[0] == "UserID"){
							   	 	userid = unescape(temp[1]);
							   	 	param +="&userid="+userid;
							   	 	break;
					   		 	 }
				   		     }
					       }
					       //other cookie values
					       if (arrStr[i].indexOf("id58") > -1) {
							 var temp = arrStr[i];
							 var index = temp.indexOf("=");
							 var key = temp.substring(0, index);
							 temp = temp.substring(index + 1);
							 param += "&" + key.trim() + "=" +temp;
						   }
				   	    }
						//other param
						if(undefined != document.getElementById("uavalues")&& null != document.getElementById("uavalues") ){
							var otherparam = document.getElementById("uavalues").value.split(";");
							for(var i = 0 ; i < otherparam.length; i++){
								var temp = otherparam[i];
								var key = temp.split(":")[0];
								var value = temp.split(":")[1];
								param +="&"+key+"="+value;
							}
						}
						//serverip param
						if(undefined != document.getElementById("serverip")&& null != document.getElementById("serverip") ){
							var serverip = document.getElementById("serverip").value;
							var key = serverip.split(":")[0];
							var value = serverip.split(":")[1];
							param +="&"+key+"="+value;
						}
						//referer url
						var refurl = document.referrer
						if(undefined != refurl && null != refurl){
							param +="&refurl="+refurl;
						}
						//_trackURL
						try { 
							if(undefined != _trackURL){
								var obs = eval ("(" + _trackURL + ")");
								if(undefined != obs.cate){
									param +="&cate="+obs.cate;
								}
								if(undefined != obs.area){
									param +="&area="+obs.area;
								}
								if(undefined != obs.pagetype){
									param +="&pagetype="+obs.pagetype;
								}
								if(undefined != obs.pagesize){
									param +="&pagesize="+obs.pagesize;
								}
								if(undefined != obs.pagenum){
									param +="&pagenum="+obs.pagenum;
								}
								if(undefined != obs.jiage){
									param +="&jiage="+obs.jiage;
								}
							}
						} 
						catch (e) {
						}finally{
							//send
	                        callback = 2 == localServerMode ? emptyFunction : callback || emptyFunction;                
	                        _ioo && ajax.send(_config.localGifPath, param, mark, callback, _true);
						}
                    }
                }
            }
            _gaCookie.setautmB(arr_autmb[_join]("."));
            _gaCookie.setautmBCookie()
        };
        oThis.getCheckCode = function(domainHash){
            for(var _params_hash = [], params = [_param_autma, _param_autmz, _param_autmv, _param_autmx], cookie = _gaCookie.getCookie(), _domainHash, i = 0; i < params[_length]; i++){
            	_domainHash = Pick(cookie, params[i] + domainHash, ";");
                if(!IsEmpty(_domainHash)){
                    if(params[i] == _param_autmv){
                        _domainHash = _domainHash[_split](domainHash + ".")[1][_split]("|")[0];
                        if(IsEmpty(_domainHash)){
                            continue;
                        }
                        _domainHash = domainHash + "." + _domainHash;
                    }
                    Push(_params_hash, params[i] + _domainHash + ";");
                }
            }
            return Encode(_params_hash[_join]("+"));
        }
    };
    var GaEComm = function(){
        var oThis = this;
        oThis.transactions = [];
        oThis.addItem = function(orderId){
            for(var _tran, _trans = oThis.transactions, i = 0; i < _trans[_length]; i++){
                _tran = orderId == _trans[i].orderId ? _trans[i] : _tran;
            }
            return _tran;
        };
        oThis.addTrans = function(orderId, affiliation, total, tax, shipping, city, state, country){
            var transaction = oThis.addItem(orderId);
            if(_undefined == transaction){
                transaction = new GaEComm.Transaction(orderId, affiliation, total, tax, shipping, city, state, country);
                Push(oThis.transactions, transaction);
            }else{
                transaction.affiliation = affiliation;
                transaction.total = total;
                transaction.tax = tax;
                transaction.shipping = shipping;
                transaction.city = city;
                transaction.state = state;
                transaction.country = country;
            }
            return transaction;
        }
    };
    GaEComm.Item = function(orderId, sku, name, category, price, quantity){
        var oThis = this;
        oThis.orderId = orderId;
        oThis.sku = sku;
        oThis.name = name;
        oThis.category = category;
        oThis.price = price;
        oThis.quantity = quantity;
        oThis.serialize = function(){
            return "&" + ["autmt=item", "tid=" + Encode(oThis.orderId), "ipc=" + Encode(oThis.sku), "ipn=" + Encode(oThis.name), "iva=" + Encode(oThis.category), "ipr=" + Encode(oThis.price), "iqt=" + Encode(oThis.quantity)][_join]("&autm");
        }
    };
    GaEComm.Transaction = function(orderId, affiliation, total, tax, shipping, city, state, country){
        var oThis = this;
        oThis.orderId = orderId;
        oThis.affiliation = affiliation;
        oThis.total = total;
        oThis.tax = tax;
        oThis.shipping = shipping;
        oThis.city = city;
        oThis.state = state;
        oThis.country = country;
        oThis.items = [];
        oThis.addItem = function(sku, name, category, price, quantity){
            var item = oThis.getItem(sku),
                orderId = oThis.orderId;
            if(_undefined == item){
                Push(oThis.items, new GaEComm.Item(orderId, sku, name, category, price, quantity));
            }
            else{
                item.orderId = orderId;
                item.sku = sku;
                item.name = name;
                item.category = category;
                item.price = price;
                item.quantity = quantity;
            }
        };
        oThis.getItem = function(sku){
            for(var item, _items = oThis.items, i = 0; i < _items[_length]; i++){
                item = sku == _items[i].sku ? _items[i] : item;
            }
            return item;
        };
        oThis.serialize = function(){
            return "&" + ["autmt=tran", "id=" + Encode(oThis.orderId), "st=" + Encode(oThis.affiliation), "to=" + Encode(oThis.total), "tx=" + Encode(oThis.tax), "sp=" + Encode(oThis.shipping), "ci=" + Encode(oThis.city), "rg=" + Encode(oThis.state), "co=" + Encode(oThis.country)][_join]("&autmt");
        }
    };
    var Client = function(detectFlash){
        function getFlashVersion(){
            var _active_x_object,
                _flash,
                _version;
            _flash = "ShockwaveFlash";
            var _version_key = "$version",
                navigator = $Global[_str_window].navigator;
            if((navigator = navigator ? navigator.plugins : _undefined) && navigator[_length] > 0){
                for(var i = 0; i < navigator[_length] && !_version; i++){
                    _flash = navigator[i];
                    if(Contains(_flash.name, "Shockwave Flash")){
                        _version = _flash.description[_split]("Shockwave Flash ")[1];
                    }
                }
            }else{
                _flash = _flash + "." + _flash;
                try{
                    _active_x_object = new ActiveXObject(_flash + ".7");
                    _version = _active_x_object.GetVariable(_version_key)
                }catch(ex){}
                if(!_version){
                    try{
                        _active_x_object = new ActiveXObject(_flash + ".6");
                        _version = "WIN 6,0,21,0";
                        _active_x_object.$_version = "always";
                        _version = _active_x_object.GetVariable(_version_key)
                    }catch(ex){}
                }
                if(!_version){
                    try{
                        _active_x_object = new ActiveXObject(_flash);
                        _version = _active_x_object.GetVariable(_version_key)
                    }catch(ex){}
                }
                if(_version){
                    _version = _version[_split](" ")[1][_split](",");
                    _version = _version[0] + "." +  _version[1] + " r" + _version[2];
                }
            }
            return _version ? _version : _empty;
        }
        var oThis = this,
            _empty = "-",
            screen = $Global[_str_window].screen,
            navigator = $Global[_str_window].navigator;
        oThis.screen = screen ? screen.width + "x" + screen.height : _empty;
        oThis.colorDepth = screen ? screen.colorDepth + "-bit" : _empty;
        oThis.charset = Encode($Global[_str_document].characterSet ? $Global[_str_document].characterSet : $Global[_str_document].charset ? $Global[_str_document].charset : _empty);
        oThis.language = (navigator && navigator.language ? navigator.language : navigator && navigator.browserLanguage ? navigator.browserLanguage : _empty)[_toLowerCase]();
        oThis.javaEnabled = navigator && navigator.javaEnabled() ? 1 : 0;
        oThis.flashVersion = detectFlash ? getFlashVersion() : _empty;
        oThis.getClientInfo = function(){
            return _amp_ + "autm" + ["cs=" + Encode(oThis.charset), "sr=" + oThis.screen, "sc=" + oThis.colorDepth, "ul=" + oThis.language, "je=" + oThis.javaEnabled, "fl=" + Encode(oThis.flashVersion)][_join]("&autm");
        };
        oThis.hashClientInfo = function(){
            var navigator = $Global[_str_window].navigator,
                history_length = $Global[_str_window].history[_length];
            navigator= navigator.appName + navigator.version + oThis.language + navigator.platform + navigator.userAgent + oThis.javaEnabled + oThis.screen + oThis.colorDepth + ($Global[_str_document][_cookie] ? $Global[_str_document][_cookie] : "") + ($Global[_str_document].referrer ? $Global[_str_document].referrer : "");
            for(var len = navigator[_length]; history_length > 0; ){
                navigator += history_length-- ^ len++;
            }
            return Hash(navigator);
        }
    };
    var SourceTracker = function(domainHash, processedSource, timestamp, config){
        
        function getDomain(url){
            var _domain = "";
            _domain = url[_split]("://")[1][_toLowerCase]();
            if(Contains(_domain, "/")){
                _domain = _domain[_split]("/")[0];
            }
            return _domain;
        }
        var _config = config,
            oThis = this;
        oThis.domainHash = domainHash;
        oThis.processedSource = processedSource;
        oThis.timestamp = timestamp;
        oThis.createOrganicSource = function(url){
            var organic = oThis.getOrganicSource();
            return new SourceTracker.Source(Pick(url, _config.id + _equal_, _amp_), Pick(url, _config.source + _equal_, _amp_), Pick(url, _config.clid + _equal_, _amp_), oThis.getValue(url, _config.campaign, "(not set)"), oThis.getValue(url, _config.medium, "(not set)"), oThis.getValue(url, _config.term, organic && !IsEmpty(organic.G) ? Fa(organic.G) : _undefined), oThis.getValue(url, _config.content, _undefined));
        };
        oThis.isGoogleCustomSearch = function(url){
            var _domain = getDomain(url),
                _url;
            _url = url;
            var path = "";
            _url = _url[_split]("://")[1][_toLowerCase]();
            if(Contains(_url, "/")){
                _url = _url[_split]("/")[1];
                if(Contains(_url, "?")){
                    path = _url[_split]("?")[0]
                }
            }
            _url = path;
            if(Contains(_domain, "google")){
                url = url[_split]("?")[_join](_amp_);
                if(Contains(url, _amp_ + _config.googleKey + _equal_)){
                    if(_url == _config.googleCustomSearchPath){
                        return _true;
                    }
                }
            }
            return _false;
        };
        oThis.getOrganicSource = function(){
            var key,
                processedSource = oThis.processedSource,
                _organic,
                organic = _config.organic;
            if(!(IsEmpty(processedSource) || "0" == processedSource || !Contains(processedSource, "://") || oThis.isGoogleCustomSearch(processedSource))){
            	key = getDomain(processedSource);
                for(var i = 0; i < organic[_length]; i++){
                    _organic = organic[i];
                    if(Contains(key, _organic.engine[_toLowerCase]())){
                        processedSource = processedSource[_split]("?")[_join](_amp_);
                        if(Contains(processedSource, _amp_ + _organic.keyword + _equal_)){
                            key = processedSource[_split](_amp_ + _organic.keyword + _equal_)[1];
                            if(Contains(key, _amp_)){
                                key = key[_split](_amp_)[0];
                            }
                           
                            return new SourceTracker.Source(_undefined, _organic.engine, _undefined, "(organic)", "organic", key, _undefined);
                        }
                    }
                }
            }
        };
        oThis.getValue = function(map, key, _default){
            var value = Pick(map, key + _equal_, _amp_),
                result = "-";
            return result = !IsEmpty(value) ? Decode(value) : !IsEmpty(_default) ? _default : "-";
        };
        oThis.isIgnoredOrganic = function(source){
            var ignoredOrganic = _config.ignoredOrganic,
                result = _false;
            if(source && "organic" == source.medium){
                source = Decode(source.term)[_toLowerCase]();
                for(var i = 0; i < ignoredOrganic[_length]; i++){
                    result = result || ignoredOrganic[i][_toLowerCase]() == source;
                }
            }
            return result;
        };
        oThis.getReferralSource = function(){
            var processedSource = "",
                content = "";
                processedSource = oThis.processedSource;
            if(!(IsEmpty(processedSource) || "0" == processedSource || !Contains(processedSource, "://") || oThis.isGoogleCustomSearch(processedSource))){
                processedSource = processedSource[_split]("://")[1];
                if(Contains(processedSource, "/")){
                    content = processedSource[_substring](processedSource[_str_indexOf]("/"));
                    content = content[_split]("?")[0];
                    processedSource = processedSource[_split]("/")[0][_toLowerCase]()
                }
                if(0 == processedSource[_str_indexOf]("www.")){
                    processedSource = processedSource[_substring](4);
                }
                return new SourceTracker.Source(_undefined, processedSource, _undefined, "(referral)", "referral", _undefined, content)
            }
        };
        oThis.parseHasAnchorUrl = function(url){
            var result = "";
            if(_config.allowAnchor){
                result = url && url.hash ? url[_href][_substring](url[_href][_str_indexOf]("#")) : "";
                result = "" != result ? result + _amp_ : result;
            }
            result += url.search;
            return result;
        };
        oThis.getDirectSource = function(){
            return new SourceTracker.Source(_undefined, "(direct)", _undefined, "(direct)", "(none)", _undefined, _undefined)
        };
        oThis.isIgnoredReferral = function(source){
            var result = _false,
                ignoredReferral = _config.ignoredReferral;
            if(source && "referral" == source.medium){
                source = Encode(source.source)[_toLowerCase]();
                for(var i = 0; i < ignoredReferral[_length]; i++){
                    result = result || Contains(source, ignoredReferral[i][_toLowerCase]());
                }
            }
            return result;
        };
        oThis.check = function(source){
            return _undefined != source && source.checkSelfIntegrity();
        };
        oThis.checkautmZ = function(cookie){
            var _autmz = Pick(cookie, _param_autmz + oThis.domainHash + ".", ";");
            var arrautmZ = _autmz[_split](".");
            var _b_source = new SourceTracker.Source;
            _b_source.initialize(arrautmZ.slice(4)[_join]("."));
            if(!oThis.check(_b_source)){
                return _true;
            }
            var url = $Global[_str_document][_location];
            url = oThis.parseHasAnchorUrl(url);
            var _a_source = oThis.createOrganicSource(url);
            if(!oThis.check(_a_source)){
                _a_source = oThis.getOrganicSource();
                oThis.check(_a_source) || (_a_source = oThis.getReferralSource())
            }
            return oThis.check(_a_source) && _b_source.serialize()[_toLowerCase]() != _a_source.serialize()[_toLowerCase]();
        };
        oThis.dc = function(gaCookie, c){
            if(_config.campaignTrack){
                var url = "",
                    _autmz = "-",
                    _source,
                    q = 0,
                    b,
                    cookie,
                    _domainHash = oThis.domainHash;
                if(gaCookie){
                    cookie = gaCookie.getCookie();
                    url = oThis.parseHasAnchorUrl($Global[_str_document][_location]);
                    if(_config.allowLinker && gaCookie.checkParamsHash()){
                        _autmz = gaCookie.getautmZ();
                        if(!IsEmpty(_autmz) && !Contains(_autmz, ";")){
                            gaCookie.setautmZCookie();
                            return
                        }
                    }
                    _autmz = Pick(cookie, _param_autmz + _domainHash + ".", ";");
                    _source = oThis.createOrganicSource(url);
                    if(oThis.check(_source)){
                        url = Pick(url, _config.nooverride + _equal_, _amp_);
                        if("1" == url && !IsEmpty(_autmz)){
                            return;
                        }
                    }
                    if(!oThis.check(_source)){
                        _source= oThis.getOrganicSource();
                        url = oThis.isIgnoredOrganic(_source);
                        if(!IsEmpty(_autmz) && url){
                            return;
                        }
                        if(url){
                            _source = oThis.getDirectSource()
                        }
                    }
                    if(!oThis.check(_source) && c){
                        _source = oThis.getReferralSource();
                        url = oThis.isIgnoredReferral(_source);
                        if(!IsEmpty(_autmz) && url){
                            return;
                        }
                        if(url){
                            _source = oThis.getDirectSource()
                        }
                    }
                    if(!oThis.check(_source)){
                        if(IsEmpty(_autmz) && c){
                            _source = oThis.getDirectSource();
                        }
                    }
                    if(oThis.check(_source)){
                        if(!IsEmpty(_autmz)){
                            q = _autmz[_split](".");
                            b = new SourceTracker.Source;
                            b.initialize(q.slice(4)[_join]("."));
                            b = b.serialize()[_toLowerCase]() == _source.serialize()[_toLowerCase]();
                            q = q[3] * 1
                        }
                        if(!b || c){
                            cookie = Pick(cookie, _param_autma + _domainHash + ".", ";");
                            b = cookie.lastIndexOf(".");
                            cookie = b > 9 ? cookie[_substring](b + 1) * 1 : 0;
                            q++;
                            cookie = 0 == cookie ? 1 : cookie;
                            gaCookie.setautmZ([_domainHash, oThis.timestamp, cookie, q, _source.serialize()][_join]("."));
                            gaCookie.setautmZCookie()
                        }
                    }
                }
            }
        }
    };
    SourceTracker.Source = function(id, source, clid, campaign, medium, term, content){
        var oThis = this;
        oThis.id = id;
        oThis.source = source;
        oThis.clid = clid;
        oThis.campaign = campaign;
        oThis.medium = medium;
        oThis.term = term;
        oThis.content = content;
        oThis.serialize = function(){
            var source = [],
                map = [["cid", oThis.id], ["csr", oThis.source], ["gclid", oThis.clid], ["ccn", oThis.campaign], ["cmd", oThis.medium], ["ctr", oThis.term], ["cct", oThis.content]],
                i,
                value;
                
            if(oThis.checkSelfIntegrity()){
                for(i = 0; i < map[_length]; i++){
                    if(!IsEmpty(map[i][1])){
                        value = map[i][1][_split]("+")[_join]("%20");
                        value = value[_split](" ")[_join]("%20");
                        Push(source, "autm" + map[i][0] + _equal_ + value);
                    }
                }
            }
            return $Global.processSource(source[_join]("|"))
        };
        oThis.checkSelfIntegrity = function(){
            return !(IsEmpty(oThis.id) && IsEmpty(oThis.source) && IsEmpty(oThis.clid));
        };
        oThis.initialize = function(map){
            var _get = function(key){
                return Decode(Pick(map, "autm" + key + _equal_, "|"));
            };
            oThis.id = _get("cid");
            oThis.source = _get("csr");
            oThis.clid = _get("gclid");
            oThis.campaign= _get("ccn");
            oThis.medium = _get("cmd");
            oThis.term = _get("ctr");
            oThis.content = _get("cct");
        }
    };
    var CustomVariable = function(config, domainHash, gaCookie, cache){
        var oThis = this,
            _domainHash = domainHash,
            _equal = _equal_,
            _config = config,
            _cache = cache;
        oThis.gaCookie = gaCookie;
        oThis.variable = "";
        oThis.customVariables = {};
        oThis.initialize = function(){
            var _variables;
            _variables = Pick(oThis.gaCookie.getCookie(), _param_autmv + _domainHash + ".", ";")[_split](_domainHash + ".")[1];
            if(!IsEmpty(_variables)){
                _variables = _variables[_split]("|");
                var _customVariables = oThis.customVariables,
                    _var_1 = _variables[1],
                    _variable;
                if(!IsEmpty(_var_1)){
                    _var_1 = _var_1[_split](",");
                    for(var i = 0; i < _var_1[_length]; i++){
                        _variable = _var_1[i];
                        if(!IsEmpty(_variable)){
                            _variable = _variable[_split](_equal);
                            if(_variable[_length] == 4){
                                //[name, value, scope]，scope：自定义变量所使用的范围。可能的值包括 1（访问者级）、2（会话级）和 3（网页级）。
                                _customVariables[_variable[0]] = [_variable[1], _variable[2], 1];//第一种情况
                            }
                        }
                    }
                }
                oThis.variable = _variables[0];
                oThis.save();
            }
        };
        oThis.save = function(){
            oThis.clearCache();
            var _variable = oThis.variable,
                customVariable,
                d,
                q = "";
            for(customVariable in oThis.customVariables){
                if((d = oThis.customVariables[customVariable]) && 1 === d[2]){
                    q += customVariable + _equal + d[0] + _equal + d[1] + _equal + 1 + ",";//第一种情况
                    IsEmpty(q) || (_variable += "|" + q);
                }
            }
            if(IsEmpty(_variable)){
                oThis.gaCookie.deleteautmVCookie();
            }else{
                oThis.gaCookie.setautmV(_domainHash + "." + _variable);
                oThis.gaCookie.setautmVCookie();
            }
        };
        oThis.setVar = function(variable){
            oThis.variable = variable;
            oThis.save();
        };
        oThis.setCustomVar = function(index, name, value, scope){
            if(1 != scope && 2 != scope && 3 != scope){
                scope = 3;
            }
            var result = _false;
            if(name && value && index > 0 && index <= _config.maxCustomVariables){
                name = Encode(name);
                value = Encode(value);
                if(name[_length] + value[_length] <= 64){
                    oThis.customVariables[index] = [name, value, scope];
                    oThis.save();
                    result = _true;
                }
            }
            return result;
        };
        oThis.getVisitorCustomVar = function(index){
            var customVariable;
            if((customVariable = oThis.customVariables[index]) && 1 === customVariable[2]){
                return customVariable[1];
            }
        };
        oThis.deleteCustomVar = function(index){
            var _customVariables = oThis.customVariables;
            if(_customVariables[index]){
                delete _customVariables[index];
                oThis.save()
            }
        };
        oThis.clearCache = function(){
            _cache.clearKey(8);
            _cache.clearKey(9);
            _cache.clearKey(11);
            var _customVariables = oThis.customVariables,
                _customVariable,
                key;
            for(key in _customVariables){
                if(_customVariable = _customVariables[key]){
                    _cache.setKey(8, key, _customVariable[0]);
                    _cache.setKey(9, key, _customVariable[1]);
                    (_customVariable = _customVariable[2]) && 3 != _customVariable && _cache.setKey(11, key, "" + _customVariable);
                }
            }
        }
    };
    var Cache = function(){
        function _set(cache, key, idx, vlaue){
            if(_undefined == _Cache[cache]){
                _Cache[cache] = {};
            }
            if(_undefined == _Cache[cache][key]){
                _Cache[cache][key] = [];
            }
            _Cache[cache][key][idx] = vlaue;
        }
        function _get(cache, key, idx){
            if(_undefined != _Cache[cache] && _undefined != _Cache[cache][key]){
                return _Cache[cache][key][idx];
            }
        }
        function _clear(cache, key){
            if(_undefined != _Cache[cache] && _undefined != _Cache[cache][key]){
                _Cache[cache][key] = _undefined;
                var y = _true,
                    i;
                for(i = 0; i < _map_key[_length]; i++){
                    if(_undefined != _Cache[cache][_map_key[i]]){
                        y = _false;
                        break;
                    }
                }
                if(y){
                    _Cache[cache] = _undefined;
                }
            }
        }
        function _serialize(o){
            var serialization = "",
                y = _false,
                i,
                _key;
            for(i = 0; i < _map_key[_length]; i++){
                _key = o[_map_key[i]];
                if(_undefined != _key){
                    if(y)serialization += _map_key[i];
                    y = [];
                    var J = void 0, G = void 0;
                    for(G = 0; G < _key[_length]; G++){
                        if(_undefined != _key[G]){
                            J = "";
                            if(G != t && _undefined == _key[G - 1]){
                                J += G[_toString]() + _exclamation;
                            }
                            var R;
                            R = _key[G];
                            var ma = "", Y = void 0, da = void 0, Ga = void 0;
                            for(Y = 0; Y < R[_length]; Y++){
                                da = R[_charAt](Y);
                                Ga = _special_sign[da];
                                ma += _undefined != Ga ? Ga : da;
                            }
                            R = ma;
                            J += R;
                            Push(y, J);
                        }
                    }
                    _key = _left_parenthesis + y[_join](_asterisk) + _right_parenthesis;
                    serialization += _key;
                    y = _false;
                }else{
                    y = _true;
                }
            }
            return serialization;
        }
        var oThis = this,
            bind = CreateBinder(oThis),
            _Cache = {},
            _key = "k",
            _value = "v",
            _map_key = [_key, _value],
            _left_parenthesis = "(",
            _right_parenthesis = ")",
            _asterisk = "*",
            _exclamation = "!",
            _quote = "'",
            _special_sign = {};
            _special_sign[_quote] = "'0";
            _special_sign[_right_parenthesis] = "'1";
            _special_sign[_asterisk] = "'2";
            _special_sign[_exclamation] = "'3";
        var t = 1;
        oThis.exist = function(cache){
            return _undefined != _Cache[cache];
        };
        oThis.serialize = function(){
            var serialization = "",
                cache;
            for(cache in _Cache){
                if(_undefined != _Cache[cache]){
                    serialization += cache[_toString]() + _serialize(_Cache[cache]);
                }
            }
            return serialization;
        };
        oThis.Serialize = function(cache){
            if(cache == _undefined){
                return oThis.serialize();
            }
            var serialization = cache.serialize(),
                key;
            for(key in _Cache){
                if(_undefined != _Cache[key] && !cache.exist(key)){
                    serialization += key[_toString]() + _serialize(_Cache[key]);
                }
            }
            return serialization;
        };
        oThis.setKey = bind("_setKey", 89, function(cache, idx, key){
            if(typeof key != "string"){
                return _false;
            }
            _set(cache, _key, idx, key);
            return _true;
        });
        oThis.setValue = bind("_setValue", 90, function(cache, idx, value){
            if(typeof value != "number" && (_undefined == Number || !(value instanceof Number)) || _o_math.round(value) != value || value == NaN || value == Infinity){
                return _false;
            }
            _set(cache, _value, idx, value[_toString]());
            return _true;
        });
        oThis.getKey = bind("_getKey", 87, function(cache, idx){
            return _get(cache, _key, idx);
        });
        oThis.getValue = bind("_getValue", 88, function(cache, idx){
            return _get(cache, _value, idx);
        });
        oThis.clearKey = bind("_clearKey", 85, function(cache){
            _clear(cache, _key);
        });
        oThis.clearValue = bind("_clearValue", 86, function(cache){
            _clear(cache, _value);
        })
    };
    var EventTracker = function(category, tracker){
        var oThis = this,
            bind = CreateBinder(oThis);
        oThis.tracker = tracker;
        oThis.category = category;
        oThis.trackEvent = bind("_trackEvent", 91, function(action, label, value){
                return tracker.trackEvent(oThis.category, action, label, value)
            })
    };
    var TimeTracker = function(tracker, gaAjax){
        var oThis = this,
            external = $Global[_str_window].external,
            webkitPerformance = $Global[_str_window].webkitPerformance,
            _trackTimeRate = 10;
        oThis.cache = new Cache;
        oThis.getLoadTime = function(){
            var i,
                _timing = "timing",
                _onloadT = "onloadT";
            if(external && external[_onloadT] != _undefined && external.isValidLoadTime){
                i = external[_onloadT];
            }else if(webkitPerformance && webkitPerformance[_timing]){
                i = webkitPerformance[_timing].loadEventStart - webkitPerformance[_timing].navigationStart;
            }
            return i;
        };
        oThis.isTrackTime = function(){
            return tracker.isSample() && tracker.visitCode() % 100 < _trackTimeRate;
        };
        oThis.send = function(){
            var param = "&autmt=event&autme=" + Encode(oThis.cache.serialize()) + tracker.getPageInfo();
            gaAjax.send(param, tracker.account, tracker.domainHash, _false, _true);
        };
        oThis.trackLoadTime = function(){
            var _loadTime = oThis.getLoadTime();
            if(_loadTime == _undefined){
                return _false;
            }
            if(_loadTime <= 0){
                return _true;
            }
            if(_loadTime > 2147483648){
                return _false;
            }
            var _cache = oThis.cache;
            _cache.clearKey(14);
            _cache.clearValue(14);
            _cache.setValue(14, 1, _loadTime) && oThis.send();
            external && external.isValidLoadTime != _undefined && external.setPageReadyTime();
            return _false;
        };
        oThis.trackPageLoadTime = function(){
            if(!oThis.isTrackTime()){
                return _false;
            }
            if($Global[_str_window].top != $Global[_str_window]){
                return _false;
            }
            oThis.trackLoadTime() && AddListener($Global[_str_window], "load", oThis.trackLoadTime, _false);
            return _true;
        }
    };
    var GASO = function(){};//GASO令牌
    GASO.getGASO = function(gaCookie){
        var _gaso = "gaso=",
            result = "",
            url = $Global[_str_document][_location].hash;
        if(url && 1 == url[_str_indexOf](_gaso)){
            result = Pick(url, _gaso, _amp_);
        }else{
            result = (url = $Global[_str_window].name) && 0 <= url[_str_indexOf](_gaso) ? Pick(url, _gaso, _amp_) : Pick(gaCookie.getCookie(), _param_gaso, ";");
        }
        return result;
    };
    GASO.create = function(gaso, domain){
        var src = (domain || "www") + ".google.com";
        src = "https://" + src + "/analytics/reporting/overlay_js?gaso=" + gaso + _amp_ + Random();
        var id = "_gasojs",
        script = $Global[_str_document].createElement("script");
        script.type = "text/javascript";
        script.src = src;
        if(id){
            script.id = id;
        }
        ($Global[_str_document].getElementsByTagName("head")[0] || $Global[_str_document].getElementsByTagName("body")[0]).appendChild(script);
    };
    GASO.load = function(config, gaCookie){
        if(!GASO.created){
            var _gaso = GASO.getGASO(gaCookie),
                arr_gaso = _gaso && _gaso.match(/^(?:\|([-0-9a-z.]{1,30})\|)?([-.\w]{10,1200})$/i);
            if(arr_gaso){
                gaCookie.setGASO(_gaso);
                gaCookie.setGASOCookie();
                _TrackerFactory._gasoDomain = config.domain;
                _TrackerFactory._gasoCPath = config.cookiePath;
                GASO.create(arr_gaso[2], arr_gaso[1]);
            }
            GASO.created = _true;
        }
    };
    var Tracker = function(name, account, namespace){
        function _getDomain(){
            if("auto" == config.domain){
                var domain = $Global[_str_document].domain;
                if("www." == domain[_substring](0, 4)){
                    domain = domain[_substring](4);
                }
                config.domain = domain;
            }
            config.domain = config.domain[_toLowerCase]();
        }
        function _notGoogleDomain(){
            _getDomain();
            var domain = config.domain,
                _isGoogle = domain[_str_indexOf]("www.google.") * domain[_str_indexOf](".google.") * domain[_str_indexOf]("google.");
            return _isGoogle || ("/" != config.cookiePath) || (domain[_str_indexOf]("google.org") > -1);
        }
        function _setMapTimestamp(map, separator, timestamp){
            if(IsEmpty(map) || IsEmpty(separator) || IsEmpty(timestamp)){
                return"-";
            }
            map = Pick(map, _param_autma + oThis.domainHash + ".", separator);
            if(!IsEmpty(map)){
                map = map[_split](".");
                map[5] = "" + (map[5] ? map[5] * 1 + 1 : 1);
                map[3] = map[4];
                map[4] = timestamp;
                map = map[_join](".")
            }
            return map;
        }
        function _isIgnoreUrl(){
            return ("file:" != $Global[_str_document][_location][_protocol]) && _notGoogleDomain();
        }
        var oThis = this,
            bind = CreateBinder(oThis),
            gaAjax = _undefined,
            config = new Config,
            d = _false,
            customVariable = _undefined;
        oThis.name = name;
        oThis.timestamp = _o_math.round((new Date)[_getTime]()/1E3);
        oThis.account = account || "UA-XXXXX-YY";//XXXXX：帐户编号；YY：帐户内的配置文件编号。
        oThis.referrer = $Global[_str_document].referrer;
        oThis.processedSource = _undefined;
        oThis.transactions = _undefined;
        oThis.A = _false;
        oThis.client = _undefined;
        oThis.cache = _undefined;
        oThis.eventCache = _undefined;
        oThis.pageLoadTimeTracker = _undefined;
        oThis.domainHash = _undefined;
        oThis.gaCookie = _undefined;
        config.namespace = namespace ? Encode(namespace) : _undefined;
        //config.namespace = 'huangliang';
        oThis.getVisitorId = function(){
            /*
             * 2,147,483,647（二十一亿四千七百四十八万三千六百四十七）是2147483646与2147483648之间的自然数，
             * 也是欧拉在1772年所发现的一个梅森素数，它等于2^31 -1，是32位操作系统中最大的符号型整型常量。
             */
            return Random() ^ oThis.client.hashClientInfo() & 2147483647;
        };
        oThis.getDomainHash = function(){
            if(!config.domain || "" == config.domain || "none" == config.domain){
                config.domain = "";
                return 1;
            }
            _getDomain();
            return config.allowHash ? Hash(config.domain) : 1;
        };
        oThis.processReferrer = function(referrer, domain){
            if(IsEmpty(referrer)){
                referrer = "-";
            }else{
                domain += (config.cookiePath && "/" != config.cookiePath) ? config.cookiePath : "";
                var n = referrer[_str_indexOf](domain);
                referrer = (n >= 0 && n <= 8) ? "0" : (("[" == referrer[_charAt](0)) && ("]" == referrer[_charAt](referrer[_length] - 1))) ? "-" : referrer;
            }
            return referrer;
        };
        oThis.getPageInfo = function(path){
            var param = "";
            param += config.clientInfo ? oThis.client.getClientInfo() : "";
            //param += (config.detectTitle && !IsEmpty($Global[_str_document].title)) ? "&autmdt=" + Encode($Global[_str_document].title) : "";
            var hid;
            hid = _undefined;
            if($Global[_str_window] && $Global[_str_window][_gaGlobal] && $Global[_str_window][_gaGlobal].hid){
                hid = $Global[_str_window][_gaGlobal].hid;
            }else{
                hid = Random();
                $Global[_str_window].gaGlobal = $Global[_str_window][_gaGlobal] ? $Global[_str_window][_gaGlobal] : {};
                $Global[_str_window][_gaGlobal].hid = hid;
            }
            param += "&autmhid=" + hid + "&autmr=" + Encode(_o_string(oThis.processedSource)) + "&autmp=" + Encode(oThis.processPath(path));
            return param;
        };
        oThis.processPath = function(path){
            var location = $Global[_str_document][_location];
            path && Register(13);
            return path = ((undefined != path) && ("" != path)) ? Encode(path, _true) : Encode(location.pathname + location.search, _true);
        };
        oThis.send = function(path){
            if(oThis.isSample()){
                var param = "";
                if(oThis.cache != _undefined && oThis.cache.serialize()[_length] > 0){
                    param += "&autme=" + Encode(oThis.cache.serialize());
                }
                param += oThis.getPageInfo(path);
                gaAjax.send(param, oThis.account, oThis.domainHash);
            }
        };
        oThis.getParams = function(){
            var _gaCookie = new GaCookie(config);
            return _gaCookie.setDomainHashByCookie(oThis.domainHash) ? _gaCookie.getParams() : _undefined;
        };
        oThis.getLinkerUrl = bind("_getLinkerUrl", 52, function(targetUrl, useHash){
            var n = targetUrl[_split]("#"),
                _targetUrl = targetUrl,
                params = oThis.getParams();
            if(params){
                if(useHash && (1 >= n[_length])){
                    _targetUrl += "#" + params;
                }
            }else if(!useHash || (1 >= n[_length])){
                if(1 >= n[_length]){
                    _targetUrl += (Contains(targetUrl, "?") ? _amp_ : "?") + params;
                }else{
                    _targetUrl = n[0] + (Contains(targetUrl, "?") ? _amp_ : "?") + params + "#" + n[1];
                }
            }
            return _targetUrl;
        });
        oThis.rc = function(){
            var timestamp = oThis.timestamp,
                _gaCookie = oThis.gaCookie,
                cookie = _gaCookie.getCookie(),
                domainHash = oThis.domainHash + "",
                gaGlobal = $Global[_str_window] ? $Global[_str_window][_gaGlobal] : _undefined,
                _anchor,
                _has_autma = Contains(cookie, _param_autma + domainHash + "."),
                _has_autmb = Contains(cookie, _param_autmb + domainHash),
                _has_autmc = Contains(cookie, _param_autmc + domainHash),
                _autma,
                _autmb = [],
                param = "",
                ma = _false;
                cookie = IsEmpty(cookie) ? "" : cookie;
            if(config.allowLinker){
                _anchor = ($Global[_str_document][_location] && $Global[_str_document][_location].hash) ? $Global[_str_document][_location][_href][_substring]($Global[_str_document][_location][_href][_str_indexOf]("#")) : "";
                if(config.allowAnchor && !IsEmpty(_anchor)){
                    param = _anchor + _amp_;
                }
                param += $Global[_str_document][_location].search;
                if(!IsEmpty(param) && Contains(param, _param_autma)){
                    _gaCookie.setautmKHashByLocation(param);
                    _gaCookie.cb() || _gaCookie.initialize();
                    _autma = _gaCookie.getautmA();
                }
                var _getautmX = _gaCookie.getautmX;
                var _setautmX = _gaCookie.setautmX;
                var _setautmXCookie = _gaCookie.setautmXCookie;
                if(!IsEmpty(_getautmX())){
                    _setautmX(Decode(_getautmX()));
                    Contains(_getautmX(), ";") || _setautmXCookie();
                }
                var _getautmV = _gaCookie.getautmV;
                var _setautmV = _gaCookie.setautmV;
                var _setautmVCookie = _gaCookie.setautmVCookie;
                if(!IsEmpty(_getautmV())){
                    _setautmV(_getautmV());
                    Contains(_getautmV(), ";") || _setautmVCookie();
                }
            }
            if(IsEmpty(_autma)){
                if(_has_autma){
                    if(_autma = (!_has_autmb || !_has_autmc)){
                        _autma = _setMapTimestamp(cookie, ";", _o_string(timestamp));
                        oThis.A = _true;
                    }else{
                        _autma = Pick(cookie, _param_autma + domainHash + ".", ";");
                        _autmb = Pick(cookie, _param_autmb + domainHash, ";")[_split](".");
                    }
                }else{
                    _autma = [domainHash, oThis.getVisitorId(), timestamp, timestamp, timestamp, 1][_join](".");
                    ma = oThis.A = _true;
                }
            }else if(IsEmpty(_gaCookie.getautmB()) || IsEmpty(_gaCookie.getautmC())){
                _autma = _setMapTimestamp(param, _amp_, _o_string(timestamp));
                oThis.A = _true;
            }else{
                _autmb = _gaCookie.getautmB()[_split](".");
                domainHash = _autmb[0];
            }
            _autma = _autma[_split](".");
            if($Global[_str_window] && gaGlobal && gaGlobal.dh == domainHash && !config.namespace){
                _autma[4] = gaGlobal.sid ? gaGlobal.sid : _autma[4];
                if(ma){
                    _autma[3] = gaGlobal.sid ? gaGlobal.sid : _autma[4];
                    if(gaGlobal.vid){
                        timestamp = gaGlobal.vid[_split](".");
                        _autma[1] = timestamp[0];
                        _autma[2] = timestamp[1];
                    }
                }
            }
            _gaCookie.setautmA(_autma[_join]("."));
            _autmb[0] = domainHash;
            _autmb[1] = _autmb[1] ? _autmb[1] : 0;
            _autmb[2] = _undefined != _autmb[2] ? _autmb[2] : config.Sc;
            _autmb[3] = _autmb[3] ? _autmb[3] : _autma[4];
            _gaCookie.setautmB(_autmb[_join]("."));
            _gaCookie.setautmC(domainHash);
            IsEmpty(_gaCookie.getautmParamsHash())|| _gaCookie.setautmParamsHash(_gaCookie.hashautmParams());
            _gaCookie.setautmACookie();
            _gaCookie.setautmBCookie();
            _gaCookie.setautmCCookie()
        };
        oThis.setGaAjax = function(){
            gaAjax = new GaAjax(config);
        };
        
        oThis.getName = bind("_getName", 58, function(){
                return oThis.name;
            });
        oThis.initData = bind("_initData", 2, function(){
                var sourceTracker;
                if(!d){
                    if(!oThis.client){
                        oThis.client = new Client(config.detectFlash);
                    }
                    oThis.domainHash = oThis.getDomainHash();
                    oThis.gaCookie = new GaCookie(config);
                    oThis.cache = new Cache;
                    customVariable = new CustomVariable(config, _o_string(oThis.domainHash), oThis.gaCookie, oThis.cache);
                    oThis.setGaAjax();
                }
                if(_isIgnoreUrl()){
                    if(!d){
                        oThis.processedSource = oThis.processReferrer(oThis.referrer, $Global[_str_document].domain);
                        sourceTracker = new SourceTracker(_o_string(oThis.domainHash), oThis.processedSource, oThis.timestamp, config);
                    }
                    oThis.rc(sourceTracker);
                    customVariable.initialize();
                }
                if(!d){
                    _isIgnoreUrl() && sourceTracker.dc(oThis.gaCookie, oThis.A);
                    oThis.eventCache = new Cache;
                    GASO.load(config, oThis.gaCookie);
                    d = _true;
                }
            });
        oThis.visitCode = bind("_visitCode", 54, function(){
                oThis.initData();
                var _autma = Pick(oThis.gaCookie.getCookie(), _param_autma + oThis.domainHash + ".", ";");
                _autma = _autma[_split](".");
                return _autma[_length] < 4 ? "" : _autma[1];
            });
        oThis.cookiePathCopy = bind("_cookiePathCopy", 30, function(newPath){
        	//lixuefeng
                oThis.initData();
                oThis.gaCookie && oThis.gaCookie.copyCookiePath(oThis.domainHash, newPath);
            });
        oThis.isSample = function(){
        	//hl
       		return true;
//            return oThis.visitCode() % 1E4 < config.sampleRate * 100;
        };
        oThis.tp = bind("_tp", 1, function(pageURL){
            if(_isIgnoreUrl()){
                oThis.initData();
                oThis.Uc();
                oThis.send(pageURL);
                oThis.A = _false
            }
        });
        oThis.Uc = function(){
            var win = $Global[_str_window];
            if(Random() % 1E3 === 42){
                try{
                    if(win.external && win.external.onloadT != _undefined || win.webkitPerformance && win.webkitPerformance.timing){
                        Register(12);
                    }
                }catch(ex){}
            }
        };
        oThis.trackTrans = bind("_trackTrans", 18, function(){
                var domainHash = oThis.domainHash,
                    params = [],
                    i,
                    tran,
                    j;
                oThis.initData();
                if(oThis.transactions && oThis.isSample()){
                    for(i = 0; i < oThis.transactions.transactions[_length]; i++){
                        tran = oThis.transactions.transactions[i];
                        Push(params, tran.serialize());
                        for(j = 0; j < tran.items[_length]; j++){
                            Push(params, tran.items[j].serialize());
                        }
                    }
                    for(i= 0; i < params[_length]; i++){
                        gaAjax.send(params[i], oThis.account, domainHash, _true);
                    }
                }
            });
        oThis.setTrans = bind("_setTrans", 20, function(){
                var oTrans,
                    items,
                    i,
                    j,
                    transactions;
                //不能改
                oTrans = $Global[_str_document].getElementById ? $Global[_str_document].getElementById("utmtrans") : $Global[_str_document].autmform && $Global[_str_document].autmform.autmtrans ? $Global[_str_document].autmform.autmtrans : _undefined;
                oThis.initData();
                if(oTrans && oTrans.value){
                    oThis.transactions = new GaEComm;
                    transactions = oTrans.value[_split]("utm:");
                    config.transactionDelim = !config.transactionDelim || "" == config.transactionDelim ? "|" : config.transactionDelim;
                    for(i = 0; i < transactions[_length]; i++){
                        transactions[i] = Trim(transactions[i]);
                        items = transactions[i][_split](config.transactionDelim);
                        for(j = 0; j < items[_length]; j++){
                            items[j] = Trim(items[j]);
                        }
                        if("T" == items[0]){
                            oThis.addTrans(items[1], items[2], items[3], items[4], items[5], items[6], items[7], items[8]);
                        }else{
                            "I" == items[0] && oThis.addItem(items[1], items[2], items[3], items[4], items[5], items[6]);
                        }
                    }
                }
            });
        oThis.addTrans = bind("_addTrans", 21, function(orderId, affiliation, total, tax, shipping, city, state, country){
                oThis.transactions = oThis.transactions ? oThis.transactions : new GaEComm;
                return oThis.transactions.addTrans(orderId, affiliation, total, tax, shipping, city, state, country);
            });
        oThis.addItem = bind("_addItem", 19, function(orderId, sku, name, category, price, quantity){
                var item;
                oThis.transactions = oThis.transactions ? oThis.transactions : new GaEComm;
                (item = oThis.transactions.addItem(orderId)) || (item = oThis.addTrans(orderId, "", "", "", "", "", "", ""));
                item.addItem(sku, name, category, price, quantity);
            });
        oThis.setVar = bind("_setVar", 22, function(newVal ){
                if(newVal  && "" != newVal  && _notGoogleDomain()){
                    oThis.initData();
                    customVariable.setVar(Encode(newVal ));
                    oThis.isSample() && gaAjax.send("&autmt=var", oThis.account, oThis.domainHash);
                }
            });
        oThis.setCustomVar = bind("_setCustomVar", 10, function(index, name, value, scope){
                oThis.initData();
                return customVariable.setCustomVar(index, name, value, scope);
            });
        
        oThis.deleteCustomVar = bind("_deleteCustomVar", 35, function(index){
                oThis.initData();
                customVariable.deleteCustomVar(index);
            });
        oThis.getVisitorCustomVar = bind("_getVisitorCustomVar", 50, function(index){
                oThis.initData();
                return customVariable.getVisitorCustomVar(index);
            });
        oThis.setMaxCustomVariables = bind("_setMaxCustomVariables", 71, function(maxCustomVariables){
                config.maxCustomVariables = maxCustomVariables;
            });
        oThis.link = bind("_link", 101, function(targetUrl, useHash){
                if(config.allowLinker && targetUrl){
                    oThis.initData();
                    $Global[_str_document][_location].href = oThis.getLinkerUrl(targetUrl, useHash);
                }
            });
        oThis.linkByPost = bind("_linkByPost", 102, function(formObject, useHash){
                if(config.allowLinker && formObject && formObject.action){
                    oThis.initData();
                    formObject.action = oThis.getLinkerUrl(formObject.action, useHash)
                }
            });
        oThis.setXKey = bind("_setXKey", 83, function(cache, idx, key){
                oThis.cache.setKey(cache, idx, key);
            });
        oThis.setXValue = bind("_setXValue", 84, function(cache, idx, value){
                oThis.cache.setValue(cache, idx, value);
            });
        oThis.getXKey = bind("_getXKey", 76, function(cache, idx){
                return oThis.cache.getKey(cache, idx);
            });
        oThis.getXValue = bind("_getXValue", 77, function(cache, idx){
                return oThis.cache.getValue(cache, idx);
            });
        oThis.clearXKey = bind("_clearXKey", 72, function(cache){
                oThis.cache.clearKey(cache);
            });
        oThis.clearXValue= bind("_clearXValue", 73, function(cache){
                oThis.cache.clearValue(cache);
            });
        oThis.createXObj = bind("_createXObj", 75, function(){
                oThis.initData();
                return new Cache;
            });
        oThis.sendXEvent = bind("_sendXEvent", 78, function(cache){
                var param = "";
                oThis.initData();
                if(oThis.isSample()){
                    param += "&autmt=event&autme=" + Encode(oThis.cache.Serialize(cache)) + oThis.getPageInfo();
                    gaAjax.send(param, oThis.account, oThis.domainHash, _false, _true);
                }
            });
        oThis.createEventTracker = bind("_createEventTracker", 74, function(category){
                oThis.initData();
                return new EventTracker(category, oThis);
            });
        oThis.trackEvent = bind("_trackEvent", 4, function(category, action, label, value){
                oThis.initData();
                var _eventCache = oThis.eventCache;
                if(_undefined != category && _undefined != action && "" != category && "" != action){
                    _eventCache.clearKey(5);
                    _eventCache.clearValue(5);
                    (category = _eventCache.setKey(5, 1, category) && _eventCache.setKey(5, 2, action) && (_undefined == label || _eventCache.setKey(5, 3, label)) && (_undefined == value || _eventCache.setValue(5, 1, value))) && oThis.sendXEvent(_eventCache);
                }else{
                    category = _false;
                }
                return category;
            });
        oThis.trackPageLoadTime = bind("_trackPageLoadTime", 100, function(){
                oThis.initData();
                if(!oThis.pageLoadTimeTracker){
                    oThis.pageLoadTimeTracker = new TimeTracker(oThis, gaAjax);
                }
                return oThis.pageLoadTimeTracker.trackPageLoadTime();
            });
        oThis.getConfig = function(){
            return config;
        };
        oThis.setDomainName = bind("_setDomainName", 6, function(newDomainName){
                config.domain = newDomainName;
            });
        oThis.addOrganic = bind("_addOrganic", 14, function(newOrganicEngine, newOrganicKeyword, prepend){
                config.organic.splice(prepend ? 0 : config.organic[_length], 0, new Organic(newOrganicEngine, newOrganicKeyword));
            });
        oThis.clearOrganic = bind("_clearOrganic", 70, function(){
        	
                config.organic = [];
            });
        oThis.addIgnoredOrganic = bind("_addIgnoredOrganic", 15, function(newIgnoredOrganicKeyword){
                Push(config.ignoredOrganic , newIgnoredOrganicKeyword);
            });
        oThis.clearIgnoredOrganic = bind("_clearIgnoredOrganic", 97, function(){
                config.ignoredOrganic  = [];
            });
        oThis.addIgnoredRef = bind("_addIgnoredRef", 31, function(newIgnoredReferrer){
                Push(config.ignoredReferral, newIgnoredReferrer);
            });
        oThis.clearIgnoredRef = bind("_clearIgnoredRef", 32, function(){
                config.ignoredReferral = [];
            });
        oThis.setAllowHash = bind("_setAllowHash", 8, function(allowHash){
                config.allowHash = allowHash ? 1 : 0;
            });
        oThis.setCampaignTrack = bind("_setCampaignTrack", 36, function(campaignTrack){
                config.campaignTrack = campaignTrack ? 1 : 0;
            });
        oThis.setClientInfo = bind("_setClientInfo", 66, function(clientInfo){
                config.clientInfo = clientInfo ? 1 : 0;
            });
        oThis.getClientInfo = bind("_getClientInfo", 53, function(){
                return config.clientInfo;
            });
        oThis.setCookiePath = bind("_setCookiePath", 9, function(cookiePath){
                config.cookiePath = cookiePath;
            });
        oThis.setTransactionDelim = bind("_setTransactionDelim", 82, function(transactionDelim){
                config.transactionDelim = transactionDelim;
            });
        oThis.setCookieTimeout = bind("_setCookieTimeout", 25, function(newDefaultTimeout){
                oThis.setCampaignCookieTimeout(newDefaultTimeout * 1E3);
            });
        oThis.setCampaignCookieTimeout = bind("_setCampaignCookieTimeout", 29, function(cookieTimeoautmillis){
                config.campaignCookieTimeout = cookieTimeoautmillis;
            });
        oThis.setDetectFlash = bind("_setDetectFlash", 61, function(enable){
                config.detectFlash = enable ? 1 : 0;
            });
        oThis.getDetectFlash = bind("_getDetectFlash", 65, function(){
                return config.detectFlash;
            });
        oThis.setDetectTitle = bind("_setDetectTitle", 62, function(enable){
                config.detectTitle = enable ? 1 : 0;
            });
        oThis.getDetectTitle = bind("_getDetectTitle", 56, function(){
                return config.detectTitle;
            });
        oThis.setLGP = bind("_setLGP", 46, function(localGifPath){
                config.localGifPath = localGifPath;
            });
        oThis.getLocalGifPath = bind("_getLocalGifPath", 57, function(){
                return config.localGifPath;
            });
        oThis.setLocalServerMode = bind("_setLocalServerMode", 92, function(){
                config.localServerMode = 0;
            });
        oThis.setRemoteServerMode = bind("_setRemoteServerMode", 63, function(){
                config.localServerMode = 1;
            });
        oThis.setLRSM = bind("_setLRSM", 47, function(){
                config.localServerMode = 2;
            });
        oThis.getServiceMode = bind("_getServiceMode", 59, function(){
                return config.localServerMode;
            });
        oThis.setSampleRate = bind("_setSampleRate", 45, function(newRate){
                config.sampleRate = newRate;
            });
        
        oThis.setSessionTimeout = bind("_setSessionTimeout", 27, function(newTimeout){
                oThis.setSessionCookieTimeout(newTimeout * 1E3);
            });
        
        oThis.setSessionCookieTimeout= bind("_setSessionCookieTimeout", 26, function(cookieTimeoautmillis){
                config.sessionCookieTimeout = cookieTimeoautmillis;
            });
        oThis.setAllowLinker = bind("_setAllowLinker", 11, function(allowLinker){
                config.allowLinker = allowLinker ? 1 : 0;
            });
        
        oThis.setAllowAnchor = bind("_setAllowAnchor", 7, function(allowAnchor){
                config.allowAnchor = allowAnchor ? 1 : 0;
            });
        oThis.setCampNameKey = bind("_setCampNameKey", 41, function(newCampNameKey){
                config.campaign = newCampNameKey;
            });
        
        oThis.setCampContentKey = bind("_setCampContentKey", 38, function(newCampContentKey){
                config.content = newCampContentKey;
            });
        oThis.setCampIdKey = bind("_setCampIdKey", 39, function(id){
                config.id = id;
            });
        oThis.setCampMediumKey = bind("_setCampMediumKey", 40, function(newCampMedKey){
                config.medium = newCampMedKey;
            });
        oThis.setCampNOKey = bind("_setCampNOKey", 42, function(newCampNOKey){
                config.nooverride = newCampNOKey;
            });
        oThis.setCampSourceKey = bind("_setCampSourceKey", 43, function(newCampSrcKey){
                config.source = newCampSrcKey;
            });
        oThis.setCampTermKey = bind("_setCampTermKey", 44, function(newCampTermKey){
                config.term = newCampTermKey;
            });
        oThis.setCampCIdKey = bind("_setCampCIdKey", 37, function(clid){
                config.clid = clid;
            });
        
        oThis.getAccount = bind("_getAccount", 64, function(){
                return oThis.account;
            });
        oThis.setAccount = bind("_setAccount", 3, function(account){
                oThis.account = account;
            });
        oThis.setNamespace = bind("_setNamespace", 48, function(namespace){
               config.namespace = namespace ? Encode(namespace) : _undefined;
            });
            
        oThis.getVersion = bind("_getVersion", 60, function(){
                return _version_;
            });
        oThis.setAutoTrackOutbound = bind("_setAutoTrackOutbound", 79, emptyFunction);
        oThis.setTrackOutboundSubdomains = bind("_setTrackOutboundSubdomains", 81, emptyFunction);
        oThis.setHrefExamineLimit = bind("_setHrefExamineLimit", 80, emptyFunction);
        oThis.setReferrerOverride = bind("_setReferrerOverride", 49, function(newReferrerOverride){
                oThis.referrer = newReferrerOverride;
            });
        oThis.setCookiePersistence = bind("_setCookiePersistence", 24, function(milliseconds){
                oThis.setVisitorCookieTimeout(milliseconds);
            });
            
        oThis.setVisitorCookieTimeout = bind("_setVisitorCookieTimeout", 8, function(cookieTimeoautmillis ){
                config.visitorCookieTimeout = cookieTimeoautmillis ;
            })
    };
    var TrackerFactory = function(){
        var oThis = this,
            bind = CreateBinder(oThis);
        
        oThis.anonymizeIp = _false;
        oThis.Trackers = {};
        oThis.Counter = 0;
        oThis._gasoDomain = _undefined;
        oThis._gasoCPath = _undefined;
        oThis.getTracker = bind("_getTracker", 0, function(account, namespace){
                return oThis.createTracker(account, _undefined, namespace);
            });
        oThis.createTracker = bind("_createTracker", 55, function(account, name, namespace){
                name && Register(23);
                namespace && Register(67);
                if(name == _undefined){
                    name = "~" + _TrackerFactory.Counter++;
                }
                return _TrackerFactory.Trackers[name] = new Tracker(name, account, namespace);
            });
        oThis.getTrackerByName = bind("_getTrackerByName", 51, function(name){
                name = name || "";
                return _TrackerFactory.Trackers[name] || _TrackerFactory.createTracker(_undefined, name);
            });
        oThis.getGaUserPrefs = function(){
                var gaUserPrefs = _o_window[_gaUserPrefs_];
                return gaUserPrefs && gaUserPrefs[_ioo_] && gaUserPrefs[_ioo_]();
            };
        oThis.anonymizeIp = bind("_anonymizeIp", 16, function(){
                oThis.anonymizeIp = _true;
            })
    };
    var AsyncTrackerFactory = function(){
        var oThis = this,
            bind = CreateBinder(oThis);
        oThis.createAsyncTracker = bind("_createAsyncTracker", 33, function(account, name){
                return _TrackerFactory.createTracker(account, name || "");
            });
        oThis.getAsyncTracker = bind("_getAsyncTracker", 34, function(name){
                return _TrackerFactory.getTrackerByName(name);
            });
        oThis.push = function(commandArray){
            Register(5);
            for(var _arguments = arguments, err = 0, i = 0; i < _arguments[_length]; i++){
                try{
                    if(typeof _arguments[i] === "function"){
                        _arguments[i]();
                    }else{
                        var name = "",
                            o = _arguments[i][0],
                            func = o,
                            idx = o.lastIndexOf(".");
                        if(idx > 0){
                            name = o[_substring](0, idx);
                            func = o[_substring](idx + 1);
                        }
                        var oTracker = (name == _gat_) ? _TrackerFactory : (name == _hl_) ? _AsyncTrackerFactory : _TrackerFactory.getTrackerByName(name);
                        oTracker[func].apply(oTracker, _arguments[i].slice(1));
                    }
                }catch(ex){
                    err++;
                }
            }
            return err;
        }
    };
    var _TrackerFactory = new TrackerFactory;
    var singleton = _o_window[_gat_];
    if(singleton && typeof singleton._getTracker == "function"){
        _TrackerFactory = singleton;
    }else{    	
        _o_window[_gat_] = _TrackerFactory;
    }
    var _AsyncTrackerFactory = new AsyncTrackerFactory;
    _tracker_ : {
        var gaq = _o_window[_hl_],
            isArray = _false;
        if(gaq && typeof gaq[_push] == "function"){
            isArray = IsArray(gaq);
            if(!isArray){
                break _tracker_;
            }
        }
        _o_window[_hl_] = _AsyncTrackerFactory;
        isArray && _AsyncTrackerFactory[_push].apply(_AsyncTrackerFactory, gaq);
    }
})();